package thinkme.Mint;

import net.sf.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;


/**
 * @Author Mint
 * @Date 2021/7/20 16:15
 * @Description 天气预报显示类
 * @since 1.0.0
 */
public class Controller {
    public Map<String, Object> getTodayWeather1(String Cityid) throws IOException, NullPointerException {
        //连接天气的API
        String url1 = "http://www.weather.com.cn/data/sk/" + Cityid + ".html";
        //创建一个Url地址
        URL url = new URL(url1);
        //连接尝试访问设置的URL地址
        URLConnection urlConnection = url.openConnection();
        //如果超过1000毫秒没有反应，说明访问超时。一般以毫秒为单位
        urlConnection.setConnectTimeout(1000);
        //用来存储数据
        Map<String, Object> map = new HashMap<>();
        try {
            //BufferedReader：从字符输入流读取文本，缓冲字符方式提高读写文本文件的效率，而且是按行读取
            /**
             * new InputStreamReader(InputStream):从字节到字符的桥梁，
             * 此构造方法创建一个默认字符集的InputStreamReader里面是InputStream（他是表示输入字节流的所有类的超类）
             */
            //.getInputStream():返回一个InputStream用于从该连接读取
            //charsetName:使用指定的字符集(UTF-8万国码)将文件中的字节解码为字符
            BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));
            StringBuilder sb = new StringBuilder();
            String lang = null;
            //返回表示此顺序中的数据的字符串给data
            while ((lang = br.readLine()) != null) {
                //readLine()：表示一行一行读取
                //append()：将lang读取到数据返回给sb
                sb.append(lang);
            }
            //后面要用replace方法，只能用String点出来
            String datas = sb.toString();
            //截取[]转化为json格式
            /**
             * replace():表示替换
             * substring()：表示只截取，也就是只保留那些部分的数据，规则是不包含尾巴
             * indexOf():表示位置，也就是对应下标的位置
             * 去掉头部
             *             datas = datas.replace(datas.substring(0, datas.indexOf(":") + 1), "");
             * 只保留最后一个大括号
             *             datas = datas.replace(datas.substring(datas.length() - 2, datas.length()), "}");
             */

            System.out.println(datas);
            /*
             *一个Json格式的数据结构(key-value结构)
             * JSONObject.fromObject(datas):将datas对象的内容转换成JSON格式
             */
            JSONObject jsonData = JSONObject.fromObject(datas);
            //如果我返回的内容是JSON格式，那么根据key(weatherinfo)获取对应的JSONObject对象
            JSONObject info = jsonData.getJSONObject("weatherinfo");
            //getString()获取与键相关的字符串，也就是他的值。toString()把值转换成字符串，可以输出给用户看
            map.put("city", info.getString("city").toString());// 城市
            map.put("temp1", info.getString("temp").toString());// 最高温度
            map.put("WD", info.getString("WD").toString());// 风向
            map.put("SD", info.getString("SD").toString());//标准差
            map.put("time", info.getString("time").toString());//气体压强

            return map;
        } catch (SocketTimeoutException e) {
            System.out.println("连接失败");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            return map;
        }
    }


}
